package system

import (
	"github.com/shirou/gopsutil/disk"
	"os"
	"path/filepath"
	"time"
)

const TypeDisk = "disk"

func GetDiskPartitions() []disk.PartitionStat {
	partitions, _ := disk.Partitions(true)
	return partitions
}

func GetDiskUsage(diskPath string) *disk.UsageStat {
	usageStat, _ := disk.Usage(diskPath)
	return usageStat
}

func GetIOCounters() map[string]disk.IOCountersStat {
	info, _ := disk.IOCounters()
	return info
}

type FileEntry struct {
	Path      string
	Name      string
	IsDir     bool
	IsSymlink bool
	ModTime   time.Time
	Size      int64
}

func ScanDir(path string) ([]*FileEntry, error) {
	entries, err := os.ReadDir(path)
	data := make([]*FileEntry, 0, len(entries))
	for _, entry := range entries {
		info, _ := entry.Info()
		_path := filepath.Join(path, entry.Name())

		info.Size()
		info.ModTime()

		data = append(data, &FileEntry{
			Path:      _path,
			Name:      entry.Name(),
			IsDir:     entry.IsDir(),
			IsSymlink: entry.Type() == os.ModeSymlink,
			Size:      info.Size(),
			ModTime:   info.ModTime(),
		})
	}
	return data, err
}
